package dao;


import java.sql.Date;

import org.hibernate.*;
import org.hibernate.classic.Session;

import Entity.MesaCompuestaEntity;
import Entity.MesaSimpleEntity;
import Entity.ReservaEntity;
import Entity.SucursalEntity;
import Utils.HibernateUtil;
import Negocio.MesaSimple;
import dto.MesaDTO;
import dto.ReservaDTO;

public class ReservaDAO 
{
	private static ReservaDAO intances;
	private static SessionFactory sf;
	
	public static ReservaDAO getInstance()
	{
		if (intances == null)
		{
			sf = HibernateUtil.getSessionFactory();
			intances = new ReservaDAO();
		}
		return intances;
	}
	
	public int obtenerReserva (int nroSucursal, Date fecha)
	{
		int  res = 0;
		Session session = sf.openSession();
		Query q = session.createQuery("select count(rs.personas) from ReservaEntity rs, SucursalEntity s where s.idSucursal = :suc and rs.fecha between :fechaDesde and :fechaHasta");
		q.setParameter("suc",nroSucursal);
		q.setParameter("fechaDesde", fecha);//fecha.setTime(fecha.getTime()+1));
		q.setParameter("fechaHasta",fecha);//fecha.setTime(fecha.getTime()+1));
		res = (Integer)q.uniqueResult();
		return res;
	}
	public void crearReserva (SucursalEntity suc, Date fecha, int cantPersonas )
	{
		ReservaEntity reservaGrabar = new ReservaEntity();
		reservaGrabar.setFecha(fecha);
		reservaGrabar.setSucursal(suc);
		reservaGrabar.setId(maximoId()+1); 
		reservaGrabar.setPersonas(cantPersonas);
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(reservaGrabar);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}
	
	private int maximoId ()
	{
		Session session = sf.openSession();
		Query q = session.createQuery("select max(id) from ReservaEntity");
		int i = (Integer) q.uniqueResult();
		session.close();
		return i;
	}
	
	
}
